/*
*	ID : pallab81
* 	PROG : NHAY
* 	LANG : C++
* 	2012-08-30-01.05.06 Thursday
*
* 	"I have not failed, I have just found 10000 ways that won't work.
*/

#include <iostream>
#include <algorithm>
#include <vector>
#include <sstream>
#include <fstream>
#include <string>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <functional>
#include <bitset>
#include <iomanip>

#include <ctime>
#include <cassert>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <climits>
#include <cstring>
#include <cstdlib>

using namespace std;


#define foR(i1,st,ed) for(int i1 = st , j1 = ed ; i1 < j1 ; ++i1 )
#define fo(i1,ed) foR( i1 , 0 , ed )
#define foE(i1,st,ed) foR( i1, st, ed+1 )
#define foit(i, x) for (typeof((x).begin()) i = (x).begin(); i != (x).end(); i++)
#define bip system("pause")
#define Int long long
#define pb push_back
#define SZ(X) (int)(X).size()
#define LN(X) (int)(X).length()
#define mk make_pair
#define SET( ARRAY , VALUE ) memset( ARRAY , VALUE , sizeof(ARRAY) )
#define line puts("")

template<class T1>
inline void debug(T1 _x) {
    cout<<_x<<'\n';
}
template<class T1, class T2>
inline void debug(T1 _x,T2 _y) {
    cout<<_x<<' '<<_y<<'\n';
}
template<class T1, class T2, class T3>
inline void debug(T1 _x,T2 _y,T3 _z) {
    cout<<_x<<' '<<_y<<' '<<_z<<'\n';
}
template<class T1, class T2, class T3, class T4>
inline void debug(T1 _x,T2 _y,T3 _z,T4 _zz) {
    cout<<_x<<' '<<_y<<' '<<_z<<' '<<_zz<<'\n';
}
template< class T1>
inline void debug(T1 _array,int _size) {
    cout<<"[";
    for (int i=0; i<_size; ++i) {
        cout<<' '<<_array[i];
    }
    puts(" ]");
}
inline bool CI(int &_x) {
    return scanf("%d",&_x)==1;
}
inline bool CI(int &_x, int &_y) {
    return CI(_x)&&CI(_y) ;
}
inline bool CI(int &_x, int &_y, int &_z) {
    return CI(_x)&&CI(_y)&&CI(_z) ;
}
inline bool CI(int &_x, int &_y, int &_z, int &_zz) {
    return CI(_x)&&CI(_y)&&CI(_z)&&CI(_zz) ;
}
inline void wait( double seconds ) {
    double endtime = clock()+( seconds* CLOCKS_PER_SEC );
    while( clock() < endtime ) {
        ;
    }
}
#if !defined ( ONLINE_JUDGE )
#define debug
#endif

const int max_len = 1000010;
char str[max_len];
char stt[max_len];

namespace KMP {
int F[max_len];
char pattern[max_len];
char text[max_len];

inline void get_pattern(char *s) {
    sprintf(pattern,"%s",s);
}
inline void get_text(char *s) {
    sprintf(text,"%s",s);
}
inline void build_fail_function() {
    int m=strlen(pattern),i,j;
    F[0]=F[1]=0;
    for(i=2; i<=m; ++i) {
        j=F[i-1];
        while(true) {
            if(pattern[j]==pattern[i-1]) {
                F[i]=j+1;
                break;
            }
            if(j==0) {
                F[i]=0;
                break;
            }
            j=F[j];
        }
    }
}
bool prothom=true;
inline void kmp_function() {
    int i,j;
    int text_len=strlen(text);
    int pat_len = strlen(pattern);
    i=j=0;
    if(!prothom)puts("");
    else prothom=false;

    int hw=0;
    while(true) {
        if(j==text_len) {
            break;
        }
        if(text[j]==pattern[i]) {
            ++i;
            ++j;
            if(i==pat_len) {
                cout<<j-i<<'\n';
            }
        } else if(i>0) {
            i=F[i];
        } else {
            ++j;
        }
    }
}

}
inline void proc() {
    KMP::get_pattern(str);
    KMP::get_text(stt);
    KMP::build_fail_function();
    KMP::kmp_function();
}

int main() {
#if !defined( ONLINE_JUDGE )
    freopen("in","r",stdin);
#endif
    int crap;
    while( scanf("%d\n",&crap)==1 ) {
        gets(str);
        gets(stt);
        proc();
    }
    return 0;
}
